//题目描述
//
//设计用于表示点、线和三角形的类：Point、Line和Triangle，要求如下：
//
//（1）Point类中包含两个用于表示点的X和Y坐标分量的公有数据成员，能够根据指定的X和Y坐标构建点对象。
//
//（2）Line类中包含两个用于表示线段端点的私有对象成员，能够根据指定的两点构造线段对象（要求构造函数的参数为常引用），具有计算线段长度的公有成员函数。
//
//（3）Triangle类中包含三个用于表示三角顶点的私有对象成员，能够根据指定的三点构造三角形对象（要求构造函数的参数为常引用），具有计算三角形周长和面积的公有成员函数。

#include <iostream>
#include <cmath>

using namespace std;

class Point 
{
private:
	double x, y;
public:
	Point(double x , double y );
	Point(const Point& p);
	double getx();
	double gety();
	void setx(double x);
	void sety(double y);
};

class Line 
{
private:
	Point p1, p2;
public:
	Line(Point a, Point b) : p1(a), p2(b) {}
	double getDistance();
	void setp1(double x, double y);
	void setp2(double x, double y);
};

class Triangle
{
private:
	Point p1, p2, p3;
public:
	Triangle(double x1, double y1,
		double x2, double y2,
		double x3, double y3) : p1(x1, y1), p2(x2, y2), p3(x3, y3) {}
	void setp1(double x, double y);
	void setp2(double x, double y);
	void setp3(double x, double y);
	double getArea();
	double getPerimeter();
};

int main()
{
	double x1, y1, x2, y2, x3, y3;
	cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
	Triangle triangle(x1, y1, x2, y2, x3, y3);
	cout << triangle.getPerimeter() << " " << triangle.getArea();
	return 0;
}

double Line::getDistance()
{
	double detax, detay;
	detax = p1.getx() - p2.getx();
	detay = p1.gety() - p2.gety();
	return sqrt(detax * detax + detay * detay);
}

void Line::setp1(double x, double y)
{
	p1.setx(x); p1.sety(y);
}

void Line::setp2(double x, double y)
{
	p2.setx(x); p2.sety(y);
}

Point::Point(double x = 0, double y = 0)
{
	this->x = x; this->y = y;
}

Point::Point(const Point& p)
{
	x = p.x;
	y = p.y;
}

double Point::getx()
{
	return x;
}

double Point::gety()
{
	return y;
}

void Point::setx(double x)
{
	this->x = x;
}

void Point::sety(double y)
{
	this->y = y;
}

void Triangle::setp1(double x, double y)
{
	p1.setx(x); p1.sety(y);
}

void Triangle::setp2(double x, double y)
{
	p2.setx(x); p2.sety(y);
}

void Triangle::setp3(double x, double y)
{
	p3.setx(x); p3.sety(y);
}

double Triangle::getArea()
{
	Line l1(p1, p2), l2(p1, p3), l3(p2, p3);
	double L1 = l1.getDistance(),
		L2 = l2.getDistance(),
		L3 = l3.getDistance();
	double p = (L1 + L2 + L3) / 2;
	return sqrt(p * (p - L1) * (p - L2) * (p - L3));
}

double Triangle::getPerimeter()
{
	Line l1(p1,p2), l2(p1,p3), l3(p2,p3);
	double L1 = l1.getDistance(), 
		L2 = l2.getDistance(), 
		L3 = l3.getDistance();
	return L1 + L2 + L3;
}
